$(
    () => {
        // 是否点击获取验证码验证码
        let send_msg = false;
        // 判断手机号是否处理过，这样就不用再检查了
        let isMobileReady = false;
        // 获取图形验证码的uuid
        let getUuid = "";
        // 用户名
        let sUserName = ""
        // 手机号
        let mobile = "";
        // 获取密码
        let password = "";
        let repassword = "";
        // 短信验证码
        let sms_text = "";

        let $img = $(".form-item .captcha-graph-img img");
        generate();
        $img.click(generate);
        
        function generate() {
            let uuid = generateUUID();
            getUuid = uuid;
            let image_code_url = "/image_code/" + uuid + "/";
            $img.attr('src', image_code_url);
        }
        // 生成UUID
        function generateUUID() {
            let d = new Date().getTime();
            if (window.performance && typeof window.performance.now === "function") {
                d += performance.now(); //use high-precision timer if available
            }
            let uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
                let r = (d + Math.random() * 16) % 16 | 0;
                d = Math.floor(d / 16);
                return (c == 'x' ? r : (r & 0x3 | 0x8)).toString(16);
            });
            return uuid;
        }

        // 用户名验证
        let $username = $("#user_name");
        $username.blur(fn_check_username);
        function fn_check_username(){
            sUserName = $username.val();
            // 判断用户名是否为空
            if(sUserName.length == 0){
                message.show("用户名不能为空！")
                return;
            }
            // 判断用户名的格式是否正确
            if(!(/^\w{4,20}$/).test(sUserName)){
                message.showError("请输入4到20位字符的用户名");
                return;
            }
            // 判断用户名是否存在
            $.ajax({
                url: '/username/' + sUserName + '/',
                type: 'GET',
                dataType: 'JSON',
            })
                .done(function (res) {
                    // res接受后台的json对象
                    if(res.data.count === 0) {
                        return 1;
                    }
                    else{
                        message.showError(res.data.username + "已存在，请重新输入！");
                        return;
                    }
                })
                .fail(function () {
                    message.showError("请求超时，请刷新重试！");
                    return;
                })
            return 1;
        }

        // 手机号的验证
        let $mobile = $("#mobile");
        $mobile.blur(fn_check_mobile);
        function fn_check_mobile() {
            mobile = $mobile.val();
            if(mobile.length === 0){
                message.showError("手机号不能为空！");
                return;
            }
            if(!(/^1[3-9]\d{9}$/).test(mobile)){
                message.showError("手机号格式错误！");
                return;
            }
            $.ajax({
                url: '/mobile/' + mobile + '/',
                type: 'GET',
                dataType: 'JSON',
            })
                .done(function (res) {
                    if(res.data.count === 0) {
                        // message.showSuccess(res.data.mobile + "可以使用");
                        isMobileReady = true;
                        return 1;
                    }
                    else{
                        message.showError(res.data.mobile + "已存在，请重新输入！");
                        return;
                    }
                })
                .fail(function () {
                    message.showError("请求超时，请刷新重试！");
                    return;
                })
            return 1;

        }

        let $smsCodeBtn = $(".form-item .sms-captcha");
        let $imgCodeText = $("#input_captcha");
        // 点击获取验证码
        $smsCodeBtn.click(function () {
        //    验证图形验证码、手机号
        //    判断手机号是否输入
            // 没发
            if(!send_msg){
                // 检测手机号码是否验证成功
                if(!isMobileReady){
                    fn_check_mobile();
                    return
                }
                // 检测图形验证码是否输入
                let text = $imgCodeText.val();
                if(!text){
                    message.showError("请输入图形验证码！");
                    return
                }
                // 感觉没必要
                // // 判断uuid
                // if(!getUuid){
                //     message.show("图片UUID为空");
                //     return
                // }
                // 以上都通过，就可以发送了
                let sms_data = {
                    "mobile": $mobile.val(),
                    "text": text,
                    "image_code_id": getUuid
                };
                // 向后端发送请求
                $.ajax({
                    url: "/sms_code/",
                    type: "POST",
                    data: JSON.stringify(sms_data),
                    dataType: "JSON",
                    contentType: 'application/json;charset=utf-8',
                })
                    .done(function (res) {
                        console.log(res)
                        if(res.errno === "0"){
                            console.log(res.errno);
                            message.showSuccess(res.errmsg);
                            let num = 60;
                        // 设置一个定时器
                            let t = setInterval(function () {
                            num--;
                            if(num === 1){
                                // 如果计时器到最后，清除计时器对象
                                clearInterval(t);
                                $smsCodeBtn.html("获取验证码");
                                send_msg = false
                            }else{
                                $smsCodeBtn.html(num + "秒");
                                send_msg = true;
                            }
                        }, 1000)
                        }
                        else{
                            message.showError(res.errmsg);
                        }
                    })
                    .fail(function () {
                         message.showError("请求超时，请刷新重试！");
                    })

            }

        });

        // 密码验证
        let $password = $("#pwd");
        $password.blur(fn_check_password);
        function fn_check_password() {
            password = $password.val();
            if(password.length == 0){
                message.showError("密码不能为空")
                return;
            }
            if(!(/^\w{8,20}$/).test(password)){
                message.showError("密码格式错误")
                return;
            }
            return 1;
        }
        // 确认密码验证
        let $repassword = $("input[name='password_repeat']");
        $repassword.blur(fn_check_repassword);
        function fn_check_repassword(){
            repassword = $repassword.val();
            if(repassword.length == 0){
                message.showError("确认密码不能为空")
                return;
            }
            if(repassword.trim() != password.trim()){
                message.showError("确认密码输入错误")
                return;
            }
            return 1
        }
        // 短信验证码检测
        let $sms_code = $("#input_smscode");
        $sms_code.blur(fn_check_sms_code);
        function fn_check_sms_code() {
            sms_text = $sms_code.val();
            if(sms_text.length == 0){
                message.showError("短信验证码不能为空");
                return;
            }
            if(!(/^\d{6}$/).test(sms_text)){
                message.showError("短信验证码格式错误");
                return;
            }
            return 1;

        }

        // 前台注册
        let $register = $(".form-contain");



        $register.submit(function(e){
            // 阻止用户点击后直接提交
            e.preventDefault();
            if(fn_check_username() && fn_check_password() && fn_check_repassword() && fn_check_mobile() && fn_check_sms_code()){
                // 发起注册请求
                // 创建请求参数
                let register_data = {
                    "username": sUserName,
                    "password": password,
                    "repassword": repassword,
                    "mobile": mobile,
                    "sms_text": sms_text,
                };
                $.ajax({
                    url: "/register/",
                    type: "POST",
                    data: JSON.stringify(register_data),
                    dataType: "JSON",
                    contentType: "application/json;charset=utf-8"
                })
                    .done(function (res) {
                        console.log(res);
                        if(res.errno === "0"){
                            message.showSuccess("恭喜你，注册成功！");
                            setTimeout(() => {
                                window.location.href = "/index/";
                            }, 1500);
                        }
                        else{
                            message.showError(res.errmsg);
                        }
                    })
                    .fail(function () {
                        message.showError("请求超时，请刷新重试！");
                    })
            }
        })

}
);